#!/bin/sh

# ╔╦╗ ╦ ╦ ╔═╗ ╦ ╔═╗
# ║║║ ║ ║ ╚═╗ ║ ║  
# ╩ ╩ ╚═╝ ╚═╝ ╩ ╚═╝

# author	Niraj
# github	niraj998

# ┌─┐┌─┐┌┐┌┌─┐┬┌─┐┬ ┬┬─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐
# │  │ ││││├┤ ││ ┬│ │├┬┘├─┤ │ ││ ││││└─┐
# └─┘└─┘┘└┘└  ┴└─┘└─┘┴└─┴ ┴ ┴ ┴└─┘┘└┘└─┘

# uncomment your music players below.
# 

Control="MPD"
[ -n "$(pgrep spotify)" ] && Control="spotify"
# [ -n "$(pgrep rhythmbox)" ] && Control="rhythmbox"
# [ -n "$(pgrep audacious)" ] && Control="audacious"
# [ -n "$(pgrep clementine)" ] && Control="clementine"
# [ -n "$(pgrep strawberry)" ] && Control="strawberry"



# saves covers here
Cover=/tmp/cover.png
# if cover not found in metadata use this instead
bkpCover=~/.config/eww/dashboard/assets/fallback.png
# mpd music directory
mpddir=~/Music

# ┌─┐┬  ┌─┐┬ ┬┌─┐┬─┐┌─┐┌┬┐┬    ┌─┐┌─┐┬─┐┬┌─┐┌┬┐┌─┐
# ├─┘│  ├─┤└┬┘├┤ ├┬┘│   │ │    └─┐│  ├┬┘│├─┘ │ └─┐
# ┴  ┴─┘┴ ┴ ┴ └─┘┴└─└─┘ ┴ ┴─┘  └─┘└─┘┴└─┴┴   ┴ └─┘

########################## Title ##########################
title() {
title=$(playerctl --player=$Control metadata --format {{title}})
[ -z "$title" ] && title="Nothing Playing"
echo "$title"
}

########################## Artist ##########################
artist() {
artist=$(playerctl --player=$Control metadata --format {{artist}})
[ -z "$artist" ] && artist="Offline"
echo "$artist"
}

########################## Album ##########################
album() {
album=$(playerctl --player=$Control metadata --format {{album}})
[ -z "$album" ] && album="Album"
echo "$album"
}

########################## Status ##########################
status() {
status=$(playerctl --player=$Control status)
[ -z "$status" ] && status="Stopped"
echo "$status"
}

########################## Time ##########################
ctime() {
time=$(playerctl --player=$Control position --format "{{ duration(position) }}")
[ -z "$time" ] && time="0:00"
echo "$time"
}

########################## Length ##########################
length() {
length=$(playerctl --player=$Control metadata --format "{{ duration(mpris:length) }}")
[ -z "$length" ] && length="0:00"
echo "$length"
}

########################## trackNumber ##########################
playlist() {
playlist=$(playerctl --player=$Control metadata xesam:trackNumber)
[ -z "$playlist" ] && playlist="0"
echo "$playlist"
}

########################## Cover ##########################
cover() {
albumart="$(playerctl --player=$Control metadata mpris:artUrl | sed -e 's/open.spotify.com/i.scdn.co/g')"
[ $(playerctl --player=$Control metadata mpris:artUrl) ] && curl -s "$albumart" --output $Cover || cp $bkpCover $Cover 
echo "$Cover"
}

########################## Statusicon ##########################
statusicon() {
icon=""
[ $(playerctl --player=$Control status) = "Playing" ] && icon=""
[ $(playerctl --player=$Control status) = "Paused" ] && icon=""
echo "$icon"
}

########################## Lyrics ##########################
lyrics() {
Title=$(playerctl --player=$Control metadata --format {{title}})
Artist=$(playerctl --player=$Control metadata --format {{artist}})
URL="https://api.lyrics.ovh/v1/$Artist/$Title"
lyrics=$(curl -s "$( echo "$URL" | sed s/" "/%20/g | sed s/"&"/%26/g | sed s/,/%2C/g | sed s/-/%2D/g)" | jq '.lyrics' )
[ "$lyrics" = "null" ] && lyrics=$( curl -s --get "https://makeitpersonal.co/lyrics" --data-urlencode "artist=$Artist" --data-urlencode "title=$Title")
printf "$lyrics" | less
}

# ┌┬┐┌─┐┌┬┐  ┌─┐┌─┐┬─┐┬┌─┐┌┬┐┌─┐
# │││├─┘ ││  └─┐│  ├┬┘│├─┘ │ └─┐
# ┴ ┴┴  ─┴┘  └─┘└─┘┴└─┴┴   ┴ └─┘

########################## Title ##########################
mpctitle() {
title=$(mpc -f %title% current)
[ -z "$title" ] && title="Nothing Playing"
echo "$title"
}

########################## Artist ##########################
mpcartist() {
artist=$(mpc -f %artist% current)
[ -z "$artist" ] && artist="Offline"
echo "$artist"
}

########################## Album ##########################
mpcalbum() {
album=$(mpc -f %album% current)
[ -z "$album" ] && album="Album" 
echo "$album"
}

########################## Cover ##########################
mpccover() {
ffmpeg -i "$mpddir"/"$(mpc current -f %file%)" "${Cover}" -y || cp $bkpCover $Cover
echo "$Cover" && exit
}

########################## Time ##########################
mpctime() {
time=$(mpc status %currenttime%)
[ -z "$time" ] && time="0:00"
echo "$time"
}

########################## Length ##########################
mpclength() {
length=$(mpc status %totaltime%)
[ -z "$length" ] && length="0:00" 
echo "$length"
}

########################## Icon ##########################
mpcicon() {
status=$(mpc status | head -2 | tail -1 | cut -c2-7 )
icon=""
[ "$status" = "playin" ] && icon=""
[ "$status" = "paused" ] && icon=""
echo "$icon"
}

########################## Status ##########################
mpcstatus() {
stat=$(mpc status | head -2 | tail -1 | cut -c2-7 )
status="Stopped"
[ "$stat" = "playin" ] && status="Playing"
[ "$stat" = "paused" ] && status="Paused"
echo "$status"
}

########################## Percent ##########################
mpcperc() {
perc=$(mpc status %percenttime%)
[ -z "$perc" ] && perc="0" 
echo "$perc"
}

########################## Playlist ##########################
mpcsongpos() {
pos=$(mpc status %songpos%)
allsongs=$(mpc status %length%)
playlist="$pos/$allsongs"
[ -z "$pos" ] && playlist="0/0"
echo "$playlist"
}

########################## Lyrics ##########################
mpclyrics() {
Title=$(mpc -f %title% current)
Artist=$(mpc -f %artist% current)
URL="https://api.lyrics.ovh/v1/$Artist/$Title"
lyrics=$(curl -s "$( echo "$URL" | sed s/" "/%20/g | sed s/"&"/%26/g | sed s/,/%2C/g | sed s/-/%2D/g)" | jq '.lyrics' )
[ "$lyrics" = "null" ] && lyrics=$( curl -s --get "https://makeitpersonal.co/lyrics" --data-urlencode "artist=$Artist" --data-urlencode "title=$Title")
printf "$lyrics" | less
}

# ┬ ┬┌─┐┬  ┌─┐
# ├─┤├┤ │  ├─┘
# ┴ ┴└─┘┴─┘┴  

doc() {
echo "Usage:
  music [Options]

Options:
  previous	previous song
  next		next song
  toggle	toggle between play-pause song
  title		shows title of current song
  album		shows album of current song
  artist	shows artist of current song
  status	music status (playing/paused/stopped)
  statusicon	music status icons (playing/paused/stopped)
  coverloc	saves cover and shows location to cover of current song
  showcover	opens cover using feh
  time		shows current time of song
  length	shows length of song
  percent	shows percent song
  playlist	shows playlist position of current song
  lyrics	shows lyrics"
}

# ┌─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐
# │ │├─┘ │ ││ ││││└─┐
# └─┘┴   ┴ ┴└─┘┘└┘└─┘

case $Control in
	MPD)
	case $1 in 
		next)		mpc -q next		;;
		previous)	mpc -q prev		;;
		toggle)		mpc -q toggle		;;
		title)		mpctitle		;;
		artist)		mpcartist		;;
		album)		mpcalbum		;;
		status)		mpcstatus		;;
		statusicon)	mpcicon			;;
		player)		echo "$Control"		;;
		coverloc)	mpccover		;;
		showcover)	mpccover | xargs feh	;;
		time)		mpctime			;;
		length)		mpclength		;;
		percent)	mpcperc			;;
		playlist)	mpcsongpos		;;
		lyrics)		mpclyrics		;;
		*)		doc			;;
	esac
	;;
	*)
	case $1 in 
		next)		playerctl --player=$Control next	;;
		previous)	playerctl --player=$Control previous	;;
		toggle)		playerctl --player=$Control play-pause	;;
		title)		title					;;
		artist)		artist					;;
		album)		album					;;
		status)		status					;;
		statusicon)	statusicon				;;
		player)		echo "$Control"				;;
		coverloc)	cover					;;
		showcover)	cover | xargs feh 			;;
		time)		ctime 					;;
		length)		length 					;;
		percent)	echo "0"				;;
		playlist)	playlist				;;
		lyrics)		lyrics					;;
		*)		doc					;;
	esac
esac 2>/dev/null

